package yanglei.day0109.travel.utils;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * @Author: YangLei
 * @CreateTime: 2022-12-13  09:59
 * @Description: 使用单例模式（懒汉模式 --> 使用双重检查锁）
 * 加载配置资源管理器
 */
public class ConfigManager {
    // 1、定义静态实例引用
    private volatile static ConfigManager configManger;
    // 定义一个静态Properties（解析处理资源文件相关信息）实例引用
    private static Properties properties;

    // 2、私有构造
    private ConfigManager() {
        /*初始加载处理，数据库资源配置文件*/
        // ①定义 database.properties 配置文件路径
        String configPath = "database.properties";
        // ②创建properties实例对象
        properties = new Properties();
        // ③通过类加载器加载解析 database.properties 配置文件
        InputStream is = ConfigManager.class.getClassLoader().getResourceAsStream(configPath);
        // ④加载输入流
        try {
            properties.load(is);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            if (is != null) {
                try {
                    // 释放文件输入流
                    is.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }

    // 3、处理提供调用该类静态实例的静态方法
    public static ConfigManager getInstance() {
        // 判断该静态实例是否为空
        if (configManger == null) {
            // 加锁
            synchronized (ConfigManager.class) {
                // 双重校验判断
                if (configManger == null) {
                    configManger = new ConfigManager();
                }
            }
        }
        return configManger;
    }

    // 4、对应提供一个获取properties资源配置文件信息的方法
    public String getProperty(String key) {
        return properties.getProperty(key);
    }
}
